package model

import (
	"time"
)

// FileInfo 文件信息
type FileInfo struct {
	ID          string    `json:"id"`           // 文件唯一标识
	Path        string    `json:"path"`         // 文件路径
	Name        string    `json:"name"`         // 文件名
	Size        int64     `json:"size"`         // 文件大小（字节）
	Extension   string    `json:"extension"`    // 文件扩展名
	ContentType string    `json:"content_type"` // 内容类型
	CreatedAt   time.Time `json:"created_at"`   // 创建时间
	UpdatedAt   time.Time `json:"updated_at"`   // 更新时间
	Indexed     bool      `json:"indexed"`      // 是否已索引
	Summary     string    `json:"summary"`      // 文件摘要
}

// FileChunk 文件分块
type FileChunk struct {
	ID        string    `json:"id"`        // 分块唯一标识
	FileID    string    `json:"file_id"`    // 所属文件ID
	FilePath  string    `json:"file_path"`  // 文件路径
	Content   string    `json:"content"`   // 分块内容
	ChunkNo   int       `json:"chunk_no"`   // 分块序号
	StartPos  int       `json:"start_pos"`  // 在文件中的起始位置
	EndPos    int       `json:"end_pos"`    // 在文件中的结束位置
	StartLine int       `json:"start_line"` // 在文件中的起始行号
	EndLine   int       `json:"end_line"`   // 在文件中的结束行号
	Vector    []float32 `json:"vector"`     // 向量表示
	CreatedAt time.Time `json:"created_at"` // 创建时间
	UpdatedAt time.Time `json:"updated_at"` // 更新时间
}

// IndexStatus 索引状态
type IndexStatus struct {
	TotalFiles      int       `json:"total_files"`       // 总文件数
	IndexedFiles    int       `json:"indexed_files"`     // 已索引文件数
	TotalChunks     int       `json:"total_chunks"`      // 总分块数
	IndexedChunks   int       `json:"indexed_chunks"`    // 已索引分块数
	LastIndexedTime time.Time `json:"last_indexed_time"` // 最后索引时间
	IsIndexing      bool      `json:"is_indexing"`       // 是否正在索引
}

// SearchRequest 搜索请求
type SearchRequest struct {
	Query            string   `json:"query"`            // 搜索查询
	Limit            int      `json:"limit"`            // 返回结果数量限制
	Threshold        float32  `json:"threshold"`        // 相似度阈值
	FileTypes        []string `json:"file_types"`       // 限制文件类型
	Directories      []string `json:"directories"`      // 限制搜索目录
	EnableDedup      bool     `json:"enable_dedup"`     // 是否启用结果文件去重归纳
	DedupMultiplier  int      `json:"dedup_multiplier"`  // 去重归纳时扩大检索的倍数，默认为100
}

// SemanticSearchRequest 语义搜索请求
type SemanticSearchRequest struct {
	SearchRequest
	TopK int `json:"top_k"` // 返回前K个最相似的结果
}

// RegexSearchRequest 正则表达式搜索请求
type RegexSearchRequest struct {
	SearchRequest
	Pattern string `json:"pattern"` // 正则表达式模式
}

// SearchResult 搜索结果
type SearchResult struct {
	FileID      string    `json:"file_id"`      // 文件ID
	FileName    string    `json:"file_name"`    // 文件名
	FilePath    string    `json:"file_path"`    // 文件路径
	ChunkID     string    `json:"chunk_id"`     // 分块ID
	Content     string    `json:"content"`      // 分块内容
	Score       float32   `json:"score"`        // 相似度得分
	Highlight   string    `json:"highlight"`     // 高亮显示的内容
	ChunkNo     int       `json:"chunk_no"`     // 分块序号
	StartPos    int       `json:"start_pos"`    // 在文件中的起始位置
	EndPos      int       `json:"end_pos"`      // 在文件中的结束位置
	StartLine   int       `json:"start_line"`   // 在文件中的起始行号
	EndLine     int       `json:"end_line"`     // 在文件中的结束行号
	FileType    string    `json:"file_type"`    // 文件类型
	FileSize    int64     `json:"file_size"`    // 文件大小（字节）
	IndexedAt   time.Time `json:"indexed_at"`   // 索引时间
}

// SearchResponse 搜索响应
type SearchResponse struct {
	Results       []*SearchResult `json:"results"`       // 搜索结果列表
	Total         int             `json:"total"`         // 总结果数
	Query         string          `json:"query"`         // 原始查询
	SearchType    string          `json:"search_type"`    // 搜索类型
	Took          int64           `json:"took"`          // 搜索耗时（毫秒）
	EnableDedup   bool            `json:"enable_dedup"`   // 是否启用了去重归纳
	OriginalCount int             `json:"original_count"` // 原始结果数量（去重前）
}

// DedupSearchResult 去重归纳后的搜索结果
type DedupSearchResult struct {
	*SearchResult
	MatchCount int     `json:"match_count"` // 匹配次数
	AllScores  []float32 `json:"all_scores"`  // 所有匹配得分
}

// IndexRequest 索引请求
type IndexRequest struct {
	Directories []string `json:"directories"` // 要索引的目录列表
	Recursive   bool     `json:"recursive"`   // 是否递归索引子目录
	Force       bool     `json:"force"`       // 是否强制重新索引
}

// IndexResponse 索引响应
type IndexResponse struct {
	Success    bool   `json:"success"`    // 是否成功
	Message    string `json:"message"`    // 响应消息
	TaskID     string `json:"task_id"`     // 任务ID
	TotalFiles int    `json:"total_files"` // 总文件数
}

// FileChange 文件变更
type FileChange struct {
	Type      string    `json:"type"`       // 变更类型: create, update, delete
	Path      string    `json:"path"`       // 文件路径
	Timestamp time.Time `json:"timestamp"`  // 变更时间戳
	Size      int64     `json:"size"`       // 文件大小
}

// DirectoryConfig 目录配置
type DirectoryConfig struct {
	ID          string   `json:"id"`           // 目录唯一标识
	Path        string   `json:"path"`         // 目录路径
	Name        string   `json:"name"`         // 目录名称
	Description string   `json:"description"`  // 目录描述
	Enabled     bool     `json:"enabled"`      // 是否启用
	FileTypes   []string `json:"file_types"`   // 支持的文件类型
	ExcludeDirs []string `json:"exclude_dirs"` // 排除的子目录
	CreatedAt   time.Time `json:"created_at"`  // 创建时间
	UpdatedAt   time.Time `json:"updated_at"`  // 更新时间
}

// SystemStats 系统统计信息
type SystemStats struct {
	TotalFiles      int       `json:"total_files"`       // 总文件数
	IndexedFiles    int       `json:"indexed_files"`     // 已索引文件数
	TotalChunks     int       `json:"total_chunks"`      // 总分块数
	IndexedChunks   int       `json:"indexed_chunks"`    // 已索引分块数
	TotalVectors    int       `json:"total_vectors"`     // 总向量数
	VectorDimension int       `json:"vector_dimension"`  // 向量维度
	LastUpdateTime  time.Time `json:"last_update_time"`  // 最后更新时间
	Uptime          time.Time `json:"uptime"`           // 系统运行时间
	ServerStatus    string    `json:"server_status"`     // 服务器状态
	QdrantStatus    string    `json:"qdrant_status"`     // Qdrant连接状态
}